package com.aps.algorithm.core;

import com.aps.algorithm.heuristic.genetic.dto.ApsOperationDto;
import com.aps.algorithm.heuristic.genetic.model.Chromosome;
import com.aps.common.model.APSProductModel;
import com.aps.common.model.ApsParameterModel;
import com.aps.common.model.SchedulingResult;

import java.util.List;

/**
 * APS算法接口
 * 所有APS算法都必须实现此接口
 */
public interface APSAlgorithm {

    /**
     * 执行算法
     *
     * @param apsParameterModel APS产品模型
     * @param parameters        算法参数
     * @return 排程结果
     */
    Chromosome<ApsOperationDto> execute(ApsParameterModel apsParameterModel, AlgorithmParameters parameters);

    /**
     * 获取算法名称
     *
     * @return 算法名称
     */
    String getAlgorithmName();

    /**
     * 获取算法描述
     *
     * @return 算法描述
     */
    String getAlgorithmDescription();

    /**
     * 获取算法版本
     *
     * @return 算法版本
     */
    String getAlgorithmVersion();

    /**
     * 检查算法是否支持给定的模型
     *
     * @param model APS产品模型
     * @return 是否支持
     */
    boolean supports(APSProductModel model);
}
